
let x = {
    name: '张三丰' ,
    introduce(){
        console.log( `贫道${this.name}在此有礼了` );
    }
}

x.introduce();

let y = { 
    name: '张道陵' 
}

// 通过 x.introduce 找到相应的函数
// 通过 bind 绑定 函数内部的 this 后返回一个新的函数
let fn = x.introduce.bind( y );

// 调用绑定了 this 的新函数
fn(); // 此时才会调用 x.introduce 函数

// 总结:
// 1、除箭头函数外，其它函数都可以通过 bind 方式来设置函数内部的 this 并返回一个新的函数
//    functionReference.bind( thisArg );
//    对于箭头函数来说，可以使用 bind 来返回一个新的函数，但不能更改箭头函数内部的 this
// 2、等到调用新的函数时才会调用原来的函数
//    如前所述 当调用 fn() 时才会导致 x.introduce 执行
// 3、Function.prototype.bind( thisArg ) 可以调用除箭头函数外的其它函数

// MDN:
// https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind


let divide = (a,b) => {
    console.log( this );
    return a /b ;
};

fn = divide.bind({name:'猪悟能'}) ;

console.log( fn(6,3) );